#include "PhysicObjectTest.hpp"
#include "../src/PhysicWorld.hpp"
#include "../src/PhysicObject.hpp"


PhysicObjectTest::PhysicObjectTest()
{
}
PhysicObjectTest::~PhysicObjectTest()
{
}
        
std::string PhysicObjectTest::name()
{
    return "Physic Object test";
}

bool PhysicObjectTest::test()
{
    PhysicWorld::instance().createWorld();
    
    // static body
    json::Object s;
    s["type"] = json::String("static");
    s["angle"] = json::Number(0);
    s["position"]["x"] = json::Number(100);
    s["position"]["y"] = json::Number(150);
    s["fixedRotation"] = json::Boolean(false);
    s["bullet"] = json::Boolean(false);
    s["fixtures"] = json::Array();   
    s["fixtures"][0]["shapeType"] = json::String("rectangle");
    s["fixtures"][0]["width"] = json::Number(100);
    s["fixtures"][0]["height"] = json::Number(30);
    s["fixtures"][0]["friction"] = json::Number(0);
    s["fixtures"][0]["restitution"] = json::Number(0);
    s["fixtures"][0]["density"] = json::Number(0);
    s["fixtures"][0]["sensor"] = json::Boolean(false);    
    

    PhysicObject o;    
    try
    {
        o.load(s);
    }
    catch(...)
    {


        return false;
    }
    // dynamic body
    json::Object d;
    d["type"] = json::String("dynamic");
    d["angle"] = json::Number(0);
    d["position"]["x"] = json::Number(100);
    d["position"]["y"] = json::Number(150);
    d["fixedRotation"] = json::Boolean(false);
    d["bullet"] = json::Boolean(false);
    d["fixtures"] = json::Array();   
    d["fixtures"][0]["shapeType"] = json::String("circle");
    d["fixtures"][0]["radius"] = json::Number(5);
    d["fixtures"][0]["friction"] = json::Number(0);
    d["fixtures"][0]["restitution"] = json::Number(0);
    d["fixtures"][0]["density"] = json::Number(0);
    d["fixtures"][0]["sensor"] = json::Boolean(false); 
    
    try
    {
        o.load(d);
    }
    catch(...)
    {

        return false;
    }
    
    // fail
    json::Object f;
    f["type"] = json::String("stati");
    f["angle"] = json::Number(0);
    f["position"]["x"] = json::Number(100);
    f["position"]["y"] = json::Number(150);
    f["fixedRotation"] = json::Boolean(false);
    f["bullet"] = json::Boolean(false);
    f["fixtures"] = json::Array();  
    
    try
    {
        o.load(f);
    }
    catch(...)
    {

        return true;
    }    
    
    return false;
}

    

